7. Factory Function

다형성을 가진 기본 클래스의 소멸자는 가상 소멸자로 선언
팩토리 함수(Factory Function)
새로 생성된 파생 클래스 객체에 대한 기본 클래스 포인터를 반환하는 함수

객체를 생성할 때, 직접 객체 생성자를 호출해서 객체를 생성하지 않고,
대행함수를 이용해 간접적으로 객체를 생성하는 방식
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Monster{ // abstract class
public:
virtual void showName(void)=0;
};
class Goblin: public Monster{
void showName(void){
cout<<"Edit Goblin"<<endl;
}
};
class Ghost: public Monster{
void showName(void){
cout<<"Edit Ghost"<<endl;
}
};
class MonMgr{
public:
void newMonster(const string& name){
Monster* pMon=createMonster();
ObjPool_[name]=pMon;
pMon->showName();
}
virtual Monster* createMonster()=0; // Factory Function
private:
map<string, Monster*> ObjPool_;
};
class GoblinMgr: public MonMgr{
Monster* createMonster(){
return new Goblin;
}
};
class GhostMgr: public MonMgr{
Monster* createMonster(){
return new Ghost;
}
};
int main(void){
GoblinMgr goblin;
goblin.newMonster("goblin");
GhostMgr ghost;
ghost.newMonster("ghost");
return 0;
}
base class의 생성자는 virtual로 정의해 주어야,
base 클래스 포인터가 자식 클래스를 담고 있을 때,
소멸자가 순차적으로 호출된다.